

/*---------------------------------------------------------------------------

由原来的dev_module.h 剪切过来

---------------------------------------------------------------------------*/


// #include "dev_manager.h"



#ifndef __DEV_MANAGER_H__
#define __DEV_MANAGER_H__


#include "stdint.h"
#include <stdbool.h>



#define DEV_MAX_NUM     (2)      /////拓扑节点的总数

#define DEV_CAT1_LAMP (0xFFFF)

/////-----设备类型----
//#define   DEV_LIQUID_TYPE     (0xD006)     //液位传感器（D006H） 



/*-----------------------------------------------------------------------------------------------------------------

7.3.1 设备物模型定义
7.3.1.1子设备（拓扑）物模型
message SubDevice {
    uint32 sub_uid=1;
    uint32 sub_type=2;
    uint32 group_num=3;
    uint32 channel=4;
    uint64 sub_mac=5;
    uint32 link=6;
    uint64 link_mac=7;
}
编号	字段	名称	说明
1	sub_uid	子设备ID	子设备唯一ID（取值范围：1~65535）
{平台自动生成，与设备类型绑定，下发给网关，网关需要保存}
2	sub_type	子设备类型	用于区分不同类型的设备（见附录A）

3	group_num	分组号	取值范围：1~255；注意：组号不能为0。
为了方便同时控制多个子设备又不是广播控制时使用。
4	channel	通信方式 /
通道号	0：PLC
1~7：485
1：485I (第一路485)
2：485II (第二路485)
8：蓝牙
5	sub_mac	子设备地址	设备通讯地址码（除整数地址外，其它设备地址码，都是高字节在前，低字节在后）
根据子设备类型不同表示的含义也不同。
说明如下：
485通讯，地址码为485地址（整数）；
PLC通讯，地址码为PLC节点ID（长度6字节）。
6	link	转接终端
通信方式	二级转接子设备，例如PLC转485。
0：转LED
1~7：转485
1：485I (第一路485)
2：485II (第二路485)
8：转蓝牙  
7	link_mac	转接终端
设备地址	转接终端设备地址码（除整数地址外，其它设备地址码，都是高字节在前，低字节在后）
根据转接终端通信方式不同表示的含义也不同。
说明如下：
0 转LED，地址码为LED灯号（>0有效）；
1~7 转485，地址码为485地址（整数）；
8 转蓝牙，地址码为蓝牙地址（6字节）；



// 设备物模型定义
message SubDevice {
    uint32 sub_uid=1;
    uint32 sub_type=2;
    uint32 group_num=3;
    uint32 channel=4;
    uint64 sub_mac=5;
    uint32 link=6;
    uint64 link_mac=7;
}
message IotModel {
    uint32 iot_id=1;
    uint64 value=2;
    bytes values=3;
}
message SubIotData {
    uint32 sub_uid=1;
    OnlineState state=2;
    repeated IotModel props=3;
}

----------------------------------------------------------------------------------------------------------------*/


// read_type	读取类型
// 0：读取指定测量点
// 1：读取设备运行参数
// 2：读取设备配置参数
// 3：读取设备出厂信息

typedef enum{
    dev_read_point = 0,     //0：读取指定测量点
    dev_read_run_data ,     // 1：读取设备运行参数
    dev_read_config_data,   // 2：读取设备配置参数
    dev_read_factory_info,  // 3：读取设备出厂信息

    dev_read_all= 0xF7,       //读取设备所有信息----上行协议没有---内部定义


} dev_read_type_e;





// 0：PLC
// 1~7：485
// 1：485I (第一路485)
// 2：485II (第二路485)
// 8：蓝牙

typedef enum{
    dev_chan_plc   = 0,
    dev_chan_485_1 = 1,
    dev_chan_485_2,
    dev_chan_485_3,
    dev_chan_485_4,
    dev_chan_485_5,
    dev_chan_485_6,
    dev_chan_485_7,

    dev_chan_ble = 8,
    dev_chan_cat1 = 9,
}dev_chan_e;



/* 设备物模型定义 ----------------------------------------------------------------------------------------------------------------
typedef struct _SubDevice {
    uint32_t sub_uid;
    uint32_t sub_type;
    uint32_t group_num;
    uint32_t channel;
    uint64_t sub_mac;
    uint32_t link;
    uint64_t link_mac;
} SubDevice;

----------------------------------------------------------------------------------------------------------------*/

typedef struct{
    uint16_t sub_uid ;     //id---sub_uid	子设备ID	子设备唯一ID（取值范围：1~65535）{平台自动生成，与设备类型绑定，下发给网关，网关需要保存}
    uint16_t node_type;    //type sub_type 子设备类型	用于区分不同类型的设备（见附录A）
    uint8_t  group;        //取值范围：1~255；注意：组号不能为0

    dev_chan_e channel;        //通信方式 /通道号  channel
    dev_chan_e link_channel;   //转接终端 通信方式

    uint64_t sub_mac;         //设备通讯地址码
    uint64_t link_mac;        //转接终端设备地址码

    //uint8_t addr[6];

}  dev_topo_t;



typedef struct{

    uint16_t   node_type;      //type sub_type 子设备类型	用于区分不同类型的设备（见附录A）
    uint16_t   chan_addr ;     //通道地址    
    dev_chan_e channel;        //通信方式 /通道编号  channel
    char*   pdev_name_str ;  
   // char   pdev_name_str[] ;      
}  dev_mod_info_t;





#define dev_mac_u64(mac_array) ((uint64_t)mac_array[0] | (uint64_t)mac_array[1] << 8 | (uint64_t)mac_array[2] << 16 | (uint64_t)mac_array[3] << 24 | (uint64_t)mac_array[4] << 32 | (uint64_t)mac_array[5] << 40)

uint8_t devm_get_num(void);
void  devm_set_num(uint8_t num);

dev_topo_t* devm_get_topoinfo(uint8_t dev_id);

bool devm_get_node_type(uint16_t sub_uid,uint16_t* node_type );




#endif      ////------__DEV_MANAGER_H__---------
















